\begin{tikzpicture}

	\tikzstyle{treenode} = [component, path fading=flow fade, align=center,
	                        rounded corners=1,
	                        minimum width=12ex, minimum height=5ex]
	\tikzstyle{vfs} = [align=center, draw, opacity=0.4, scale=0.7,
	                   rounded corners=1, fill=white,
	                   minimum width=5ex, minimum height=2ex]

	%
	% Components
	%

	\node[treenode] (init) {Init};

	\node[treenode, above=8ex of init, xshift=-14ex] (vfs) {VFS server\\\\};
	\node[treenode, above=8ex of init] (fsrom) {fs\_rom};
	\node[treenode, above=8ex of init, xshift=14ex] (bash) {bash\\\\};
	\node[treenode, above=4ex of bash] (vim) {Vim\\\\};

	\node[vfs, above=1ex of vfs.south, xshift=5ex] (vfsvfs) {VFS};
	\node[left=1ex of vfsvfs, scale=0.5, yshift=-2ex] (devterminal) {Terminal};
	\node[left=1ex of vfsvfs, scale=0.5, yshift=0ex] (bashtar) {ROM bash.tar};
	\node[left=1ex of vfsvfs, scale=0.5, yshift=2ex] (vimtar) {ROM vim.tar};

	\path[arrow] (devterminal.east) -- (vfsvfs);
	\path[arrow] (bashtar.east) -- (vfsvfs);
	\path[arrow] (vimtar.east) -- (vfsvfs);

	\node[vfs, above=1ex of bash.south, xshift=0ex] (bashvfs) {VFS};
	\node[vfs, above=1ex of vim.south, xshift=0ex] (vimvfs) {VFS};

	%
	% Parent-child relationships
	%

	\tikzstyle{treechildarrow} = [arrow, thick, opacity=0.2]

	\path[treechildarrow] (init) -- (vfs.south);
	\path[treechildarrow] (init) -- (fsrom.south);
	\path[treechildarrow] (init) -- (bash.south);
	\path[treechildarrow] (bash) -- (vim.south);

	%
	% Session relationships
	%

	\tikzstyle{treesessionarrow} = [arrow, thick, densely dashed]

	\path[treesessionarrow] (fsrom.250)
		.. controls +(250:4ex) and +(320:4ex) .. (vfs.320);

	\path[treesessionarrow] (bash.230)
		.. controls +(230:4ex) and +(320:4ex) .. (fsrom.320);

	\path[treesessionarrow] (bashvfs.270)
		.. controls +(257:8ex) and +(310:7ex) .. (vfs.310);

	\path (bash.center)+(3ex,0) coordinate (midvimvfs) {};

	\path[treesessionarrow] (vimvfs.290)
		.. controls +(290:4ex) and +(90:4ex) .. (midvimvfs)
		.. controls +(270:14ex) and +(300:8ex) .. (vfs.300);

	\path[treesessionarrow] (devterminal)
		.. controls +(270:3ex) and +(90:7ex) .. (init.230);

\end{tikzpicture}
